home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / GW AdaEd 1.4.2 / GWAdaDemos / NYUDemos / FACTR.ADA < prev    next >
Text File  |  1993-01-31  |  1KB  |  60 lines

  1. -- DEMONSTRATION PROGRAM:
  2. --   Features:
  3. --     Recursive functions, separate compilation units,
  4. --     dynamic exception handling.
  5.  
  6. with TEXT_IO;
  7. package SHORT_IO is new TEXT_IO.INTEGER_IO(integer);
  8.  
  9. with TEXT_IO; use TEXT_IO;
  10. with SHORT_IO; use SHORT_IO;
  11. procedure factr is
  12.  
  13.    subtype short_int is integer range 0..9999;
  14.    x : short_int;
  15.  
  16.    function factorial (x : short_int) return short_int is separate;
  17.  
  18. begin
  19.  
  20. outer: loop                 -- Compute factorial of each input item.
  21.       begin
  22.          put_line ("Factorial of:" );
  23.          loop           -- Get an integer.
  24.         begin
  25.            exit outer when end_of_file ;
  26.            get (x);
  27.                exit;
  28.         exception
  29.            when others =>
  30.           put_line ("Enter a valid integer between 0 and 99");
  31.         end;
  32.          end loop;
  33.          put ("     ");
  34.          put (x);
  35.          put ("!  =  ");
  36.          put (factorial(x));
  37.          new_line(2);
  38.  
  39.       exception
  40.      when constraint_error =>
  41.         put ("OVERFLOW" );
  42.             new_line(2);
  43.      when others =>
  44.         exit;
  45.       end;
  46.    end loop outer;
  47.  
  48.    put_line("Glad to have been of service!" );
  49. end factr;
  50.  
  51. separate (factr)
  52. function factorial (x:short_int)return short_int is
  53. begin
  54.    if x <= 1 then
  55.       return 1;
  56.    else
  57.       return x * factorial (x-1);
  58.    end if;
  59. end factorial;
  60.